home *** CD-ROM | disk | FTP | other *** search
- /* ARP header conversion routines
- * Copyright 1991 Phil Karn, KA9Q
- */
- #include "global.h"
- #include "mbuf.h"
- #include "arp.h"
-
- /* Copy a host format arp structure into mbuf for transmission */
- struct mbuf *
- htonarp(arp)
- register struct arp *arp;
- {
- struct mbuf *bp;
- register char *buf;
-
- if(arp == (struct arp *)NULL)
- return NULLBUF;
-
- if((bp = alloc_mbuf(ARPLEN + 2 * uchar(arp->hwalen))) == NULLBUF)
- return NULLBUF;
-
- buf = bp->data;
-
- buf = put16(buf,arp->hardware);
- buf = put16(buf,arp->protocol);
- *buf++ = arp->hwalen;
- *buf++ = arp->pralen;
- buf = put16(buf,arp->opcode);
- memcpy(buf,arp->shwaddr,(int16)uchar(arp->hwalen));
- buf += arp->hwalen;
- buf = put32(buf,arp->sprotaddr);
- memcpy(buf,arp->thwaddr,(int16)uchar(arp->hwalen));
- buf += arp->hwalen;
- buf = put32(buf,arp->tprotaddr);
-
- bp->cnt = buf - bp->data;
- return bp;
- }
- /* Convert an incoming ARP packet into a host-format structure */
- int
- ntoharp(arp,bpp)
- register struct arp *arp;
- struct mbuf **bpp;
- {
- if(arp == (struct arp *)NULL || bpp == NULLBUFP)
- return -1;
-
- arp->hardware = pull16(bpp);
- arp->protocol = pull16(bpp);
- arp->hwalen = PULLCHAR(bpp);
- arp->pralen = PULLCHAR(bpp);
- arp->opcode = pull16(bpp);
- pullup(bpp,arp->shwaddr,(int16)uchar(arp->hwalen));
- arp->sprotaddr = pull32(bpp);
- pullup(bpp,arp->thwaddr,(int16)uchar(arp->hwalen));
- arp->tprotaddr = pull32(bpp);
-
- /* Get rid of anything left over */
- free_p(*bpp);
- *bpp = NULLBUF;
- return 0;
- }
-
-